home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / doom / quake_ad.zip / RESPAWN.ZIP / SRC / SOLDIER.QC < prev    next >
Text File  |  1997-03-16  |  14KB  |  372 lines

  1. /*
  2. ==============================================================================
  3.  
  4. SOLDIER / PLAYER
  5.  
  6. ==============================================================================
  7. */
  8.  
  9. $cd id1/models/soldier3
  10. $origin 0 -6 24
  11. $base base        
  12. $skin skin
  13.  
  14. $frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8
  15.  
  16. $frame death1 death2 death3 death4 death5 death6 death7 death8
  17. $frame death9 death10
  18.  
  19. $frame deathc1 deathc2 deathc3 deathc4 deathc5 deathc6 deathc7 deathc8
  20. $frame deathc9 deathc10 deathc11
  21.  
  22. $frame load1 load2 load3 load4 load5 load6 load7 load8 load9 load10 load11
  23.  
  24. $frame pain1 pain2 pain3 pain4 pain5 pain6
  25.  
  26. $frame painb1 painb2 painb3 painb4 painb5 painb6 painb7 painb8 painb9 painb10
  27. $frame painb11 painb12 painb13 painb14
  28.  
  29. $frame painc1 painc2 painc3 painc4 painc5 painc6 painc7 painc8 painc9 painc10
  30. $frame painc11 painc12 painc13
  31.  
  32. $frame run1 run2 run3 run4 run5 run6 run7 run8
  33.  
  34. $frame shoot1 shoot2 shoot3 shoot4 shoot5 shoot6 shoot7 shoot8 shoot9
  35.  
  36. $frame prowl_1 prowl_2 prowl_3 prowl_4 prowl_5 prowl_6 prowl_7 prowl_8
  37. $frame prowl_9 prowl_10 prowl_11 prowl_12 prowl_13 prowl_14 prowl_15 prowl_16
  38. $frame prowl_17 prowl_18 prowl_19 prowl_20 prowl_21 prowl_22 prowl_23 prowl_24
  39.  
  40. /*
  41. ==============================================================================
  42. SOLDIER CODE
  43. ==============================================================================
  44. */
  45.  
  46. void() army_fire;
  47. //--------------------------------------------------------- New Code --------
  48. void() army_die11;
  49. void() army_cdie12;
  50. //---------------------------------------------------------------------------
  51.  
  52. void()    army_stand1    =[    $stand1,    army_stand2    ] {ai_stand();};
  53. void()    army_stand2    =[    $stand2,    army_stand3    ] {ai_stand();};
  54. void()    army_stand3    =[    $stand3,    army_stand4    ] {ai_stand();};
  55. void()    army_stand4    =[    $stand4,    army_stand5    ] {ai_stand();};
  56. void()    army_stand5    =[    $stand5,    army_stand6    ] {ai_stand();};
  57. void()    army_stand6    =[    $stand6,    army_stand7    ] {ai_stand();};
  58. void()    army_stand7    =[    $stand7,    army_stand8    ] {ai_stand();};
  59. void()    army_stand8    =[    $stand8,    army_stand1    ] {ai_stand();};
  60.  
  61. void()    army_walk1    =[    $prowl_1,    army_walk2    ] {
  62. if (random() < 0.2)
  63.     sound (self, CHAN_VOICE, "soldier/idle.wav", 1, ATTN_IDLE);
  64. ai_walk(1);};
  65. void()    army_walk2    =[    $prowl_2,    army_walk3    ] {ai_walk(1);};
  66. void()    army_walk3    =[    $prowl_3,    army_walk4    ] {ai_walk(1);};
  67. void()    army_walk4    =[    $prowl_4,    army_walk5    ] {ai_walk(1);};
  68. void()    army_walk5    =[    $prowl_5,    army_walk6    ] {ai_walk(2);};
  69. void()    army_walk6    =[    $prowl_6,    army_walk7    ] {ai_walk(3);};
  70. void()    army_walk7    =[    $prowl_7,    army_walk8    ] {ai_walk(4);};
  71. void()    army_walk8    =[    $prowl_8,    army_walk9    ] {ai_walk(4);};
  72. void()    army_walk9    =[    $prowl_9,    army_walk10    ] {ai_walk(2);};
  73. void()    army_walk10    =[    $prowl_10,    army_walk11    ] {ai_walk(2);};
  74. void()    army_walk11    =[    $prowl_11,    army_walk12    ] {ai_walk(2);};
  75. void()    army_walk12    =[    $prowl_12,    army_walk13    ] {ai_walk(1);};
  76. void()    army_walk13    =[    $prowl_13,    army_walk14    ] {ai_walk(0);};
  77. void()    army_walk14    =[    $prowl_14,    army_walk15    ] {ai_walk(1);};
  78. void()    army_walk15    =[    $prowl_15,    army_walk16    ] {ai_walk(1);};
  79. void()    army_walk16    =[    $prowl_16,    army_walk17    ] {ai_walk(1);};
  80. void()    army_walk17    =[    $prowl_17,    army_walk18    ] {ai_walk(3);};
  81. void()    army_walk18    =[    $prowl_18,    army_walk19    ] {ai_walk(3);};
  82. void()    army_walk19    =[    $prowl_19,    army_walk20    ] {ai_walk(3);};
  83. void()    army_walk20    =[    $prowl_20,    army_walk21    ] {ai_walk(3);};
  84. void()    army_walk21    =[    $prowl_21,    army_walk22    ] {ai_walk(2);};
  85. void()    army_walk22    =[    $prowl_22,    army_walk23    ] {ai_walk(1);};
  86. void()    army_walk23    =[    $prowl_23,    army_walk24    ] {ai_walk(1);};
  87. void()    army_walk24    =[    $prowl_24,    army_walk1    ] {ai_walk(1);};
  88.  
  89. void()    army_run1    =[    $run1,        army_run2    ] {
  90. if (random() < 0.2)
  91.     sound (self, CHAN_VOICE, "soldier/idle.wav", 1, ATTN_IDLE);
  92. ai_run(11);};
  93. void()    army_run2    =[    $run2,        army_run3    ] {ai_run(15);};
  94. void()    army_run3    =[    $run3,        army_run4    ] {ai_run(10);};
  95. void()    army_run4    =[    $run4,        army_run5    ] {ai_run(10);};
  96. void()    army_run5    =[    $run5,        army_run6    ] {ai_run(8);};
  97. void()    army_run6    =[    $run6,        army_run7    ] {ai_run(15);};
  98. void()    army_run7    =[    $run7,        army_run8    ] {ai_run(10);};
  99. void()    army_run8    =[    $run8,        army_run1    ] {ai_run(8);};
  100.  
  101. void()    army_atk1    =[    $shoot1,    army_atk2    ] {ai_face();};
  102. void()    army_atk2    =[    $shoot2,    army_atk3    ] {ai_face();};
  103. void()    army_atk3    =[    $shoot3,    army_atk4    ] {ai_face();};
  104. void()    army_atk4    =[    $shoot4,    army_atk5    ] {ai_face();};
  105. void()    army_atk5    =[    $shoot5,    army_atk6    ] {ai_face();army_fire();
  106. self.effects = self.effects | EF_MUZZLEFLASH;};
  107. void()    army_atk6    =[    $shoot6,    army_atk7    ] {ai_face();};
  108. void()    army_atk7    =[    $shoot7,    army_atk8    ] {ai_face();SUB_CheckRefire (army_atk1);};
  109. void()    army_atk8    =[    $shoot8,    army_atk9    ] {ai_face();};
  110. void()    army_atk9    =[    $shoot9,    army_run1    ] {ai_face();};
  111.  
  112.  
  113. void()    army_pain1    =[    $pain1,        army_pain2    ] {};
  114. void()    army_pain2    =[    $pain2,        army_pain3    ] {};
  115. void()    army_pain3    =[    $pain3,        army_pain4    ] {};
  116. void()    army_pain4    =[    $pain4,        army_pain5    ] {};
  117. void()    army_pain5    =[    $pain5,        army_pain6    ] {};
  118. void()    army_pain6    =[    $pain6,        army_run1    ] {ai_pain(1);};
  119.  
  120. void()    army_painb1    =[    $painb1,    army_painb2    ] {};
  121. void()    army_painb2    =[    $painb2,    army_painb3    ] {ai_painforward(13);};
  122. void()    army_painb3    =[    $painb3,    army_painb4    ] {ai_painforward(9);};
  123. void()    army_painb4    =[    $painb4,    army_painb5    ] {};
  124. void()    army_painb5    =[    $painb5,    army_painb6    ] {};
  125. void()    army_painb6    =[    $painb6,    army_painb7    ] {};
  126. void()    army_painb7    =[    $painb7,    army_painb8    ] {};
  127. void()    army_painb8    =[    $painb8,    army_painb9    ] {};
  128. void()    army_painb9    =[    $painb9,    army_painb10] {};
  129. void()    army_painb10=[    $painb10,    army_painb11] {};
  130. void()    army_painb11=[    $painb11,    army_painb12] {};
  131. void()    army_painb12=[    $painb12,    army_painb13] {ai_pain(2);};
  132. void()    army_painb13=[    $painb13,    army_painb14] {};
  133. void()    army_painb14=[    $painb14,    army_run1    ] {};
  134.  
  135. void()    army_painc1    =[    $painc1,    army_painc2    ] {};
  136. void()    army_painc2    =[    $painc2,    army_painc3    ] {ai_pain(1);};
  137. void()    army_painc3    =[    $painc3,    army_painc4    ] {};
  138. void()    army_painc4    =[    $painc4,    army_painc5    ] {};
  139. void()    army_painc5    =[    $painc5,    army_painc6    ] {ai_painforward(1);};
  140. void()    army_painc6    =[    $painc6,    army_painc7    ] {ai_painforward(1);};
  141. void()    army_painc7    =[    $painc7,    army_painc8    ] {};
  142. void()    army_painc8    =[    $painc8,    army_painc9    ] {ai_pain(1);};
  143. void()    army_painc9    =[    $painc9,    army_painc10] {ai_painforward(4);};
  144. void()    army_painc10=[    $painc10,    army_painc11] {ai_painforward(3);};
  145. void()    army_painc11=[    $painc11,    army_painc12] {ai_painforward(6);};
  146. void()    army_painc12=[    $painc12,    army_painc13] {ai_painforward(8);};
  147. void()    army_painc13=[    $painc13,    army_run1] {};
  148.  
  149. void(entity attacker, float damage)    army_pain =
  150. {
  151.     local float r;
  152.     
  153.     if (self.pain_finished > time)
  154.         return;
  155.  
  156.     r = random();
  157.  
  158.     if (r < 0.2)
  159.     {
  160.         self.pain_finished = time + 0.6;
  161.         army_pain1 ();
  162.         sound (self, CHAN_VOICE, "soldier/pain1.wav", 1, ATTN_NORM);
  163.     }
  164.     else if (r < 0.6)
  165.     {
  166.         self.pain_finished = time + 1.1;
  167.         army_painb1 ();
  168.         sound (self, CHAN_VOICE, "soldier/pain2.wav", 1, ATTN_NORM);
  169.     }
  170.     else
  171.     {
  172.         self.pain_finished = time + 1.1;
  173.         army_painc1 ();
  174.         sound (self, CHAN_VOICE, "soldier/pain2.wav", 1, ATTN_NORM);
  175.     }
  176. };
  177.  
  178.  
  179. void() army_fire =
  180. {
  181.     local    vector    dir;
  182.     local    entity    en;
  183.     
  184.     ai_face();
  185.     
  186.     sound (self, CHAN_WEAPON, "soldier/sattck1.wav", 1, ATTN_NORM);    
  187.  
  188. // fire somewhat behind the player, so a dodging player is harder to hit
  189.     en = self.enemy;
  190.     
  191.     dir = en.origin - en.velocity*0.2;
  192.     dir = normalize (dir - self.origin);
  193.     
  194.     FireBullets (4, dir, '0.1 0.1 0');
  195. };
  196.  
  197.  
  198.  
  199. //--------------------------------------------------------- New Code --------
  200. //  The grunt springs to his feet!
  201. //---------------------------------------------------------------------------
  202. void()  army_revive1  =[ $death10, army_revive3  ]
  203. {       self.nextthink = self.nextthink + PM_SleepTime();
  204.         self.health = 0;
  205. };
  206. void()  army_revive2  =[ $death10, army_revive3  ]
  207. {       self.nextthink = self.nextthink + 5;    };
  208. void()  army_revive3  =[ $death10, army_revive4  ]
  209. {       // see if ok to stand up
  210.         self.health = 30;
  211.         sound (self, CHAN_VOICE, "soldier/idle.wav", 1, ATTN_IDLE);
  212.         self.solid = SOLID_SLIDEBOX;
  213.         if (!walkmove (0, 0))
  214.         {       self.think = army_revive2;
  215.                 self.solid = SOLID_NOT;
  216.                 return;
  217.         }
  218. };
  219. void()  army_revive4  =[ $death9,  army_revive5  ] {};
  220. void()  army_revive5  =[ $death8,  army_revive6  ] {};
  221. void()  army_revive6  =[ $death7,  army_revive7  ] {};
  222. void()  army_revive7  =[ $death6,  army_revive8  ] {};
  223. void()  army_revive8  =[ $death5,  army_revive9  ] {ai_painforward(12);};
  224. void()  army_revive9  =[ $death4,  army_revive10 ] {ai_painforward(16);};
  225. void()  army_revive10 =[ $death3,  army_revive11 ] {ai_painforward(16);};
  226. void()  army_revive11 =[ $death2,  army_revive12 ] {ai_painforward(12);};
  227. void()  army_revive12 =[ $death1,  army_revive13 ]
  228. {       ai_painforward(14);
  229.         sound (self, CHAN_VOICE, "demon/dland2.wav", 1, ATTN_IDLE);
  230. };
  231. void()  army_revive13 =[ $painc1,  army_revive14 ] {};
  232. void()  army_revive14 =[ $stand1,  army_run1     ]
  233. {       self.takedamage = DAMAGE_AIM;   };
  234.  
  235. //--------------------------------------------------------- New Code --------
  236. //  The grunt is NO longer face down!
  237. //---------------------------------------------------------------------------
  238. void()  army_revivec1  =[ $deathc11, army_revivec3  ]
  239. {       self.nextthink = self.nextthink + PM_SleepTime();
  240.         self.health = 0;
  241. };
  242. void()  army_revivec2  =[ $deathc11, army_revivec3  ]
  243. {       self.nextthink = self.nextthink + 5;    };
  244. void()  army_revivec3  =[ $deathc10, army_revivec4  ]
  245. {       // see if ok to stand up
  246.         self.health = 30;
  247.         sound (self, CHAN_VOICE, "soldier/idle.wav", 1, ATTN_IDLE);
  248.         self.solid = SOLID_SLIDEBOX;
  249.         if (!walkmove (0, 0))
  250.         {       self.think = army_revivec2;
  251.                 self.solid = SOLID_NOT;
  252.                 return;
  253.         }
  254. };                                              
  255. void()  army_revivec4  =[ $deathc9,  army_revivec5  ] {};
  256. void()  army_revivec5  =[ $deathc8,  army_revivec6  ] {};
  257. void()  army_revivec6  =[ $deathc7,  army_revivec7  ] {};
  258. void()  army_revivec7  =[ $deathc6,  army_revivec8  ] {};
  259. void()  army_revivec8  =[ $deathc5,  army_revivec9  ] {};
  260. void()  army_revivec9  =[ $deathc4,  army_revivec10 ] {ai_painforward(10);};
  261. void()  army_revivec10 =[ $deathc3,  army_revivec11 ] {ai_painforward(4);};
  262. void()  army_revivec11 =[ $deathc2,  army_revivec12 ] {ai_painforward(4);};
  263. void()  army_revivec12 =[ $deathc1,  army_revivec13 ] {ai_painforward(4);};
  264. void()  army_revivec13 =[ $painc1,   army_revivec14 ] {};
  265. void()  army_revivec14 =[ $stand1,   army_run1     ]
  266. {       self.takedamage = DAMAGE_AIM;   };
  267.  
  268. //============================================================================
  269.  
  270. void()    army_die1    =[    $death1,    army_die2    ] {};
  271. void()    army_die2    =[    $death2,    army_die3    ] {};
  272. void()    army_die3    =[    $death3,    army_die4    ]
  273. {self.solid = SOLID_NOT;self.ammo_shells = 5;DropBackpack();};
  274. void()    army_die4    =[    $death4,    army_die5    ] {};
  275. void()    army_die5    =[    $death5,    army_die6    ] {};
  276. void()    army_die6    =[    $death6,    army_die7    ] {};
  277. void()    army_die7    =[    $death7,    army_die8    ] {};
  278. void()    army_die8    =[    $death8,    army_die9    ] {};
  279. void()    army_die9    =[    $death9,    army_die10    ] {};
  280. //--------------------------------------------------------- Code Change -----
  281. void()  army_die10 =
  282. {       if (PM_Revive())  army_revive1();
  283.         else   army_die11();
  284. };
  285. void()  army_die11      =[      $death10,       army_die10      ] {};
  286. //---------------------------------------------------------------------------
  287.  
  288. void()    army_cdie1    =[    $deathc1,    army_cdie2    ] {};
  289. void()    army_cdie2    =[    $deathc2,    army_cdie3    ] {ai_back(5);};
  290. void()    army_cdie3    =[    $deathc3,    army_cdie4    ]
  291. {self.solid = SOLID_NOT;self.ammo_shells = 5;DropBackpack();ai_back(4);};
  292. void()    army_cdie4    =[    $deathc4,    army_cdie5    ] {ai_back(13);};
  293. void()    army_cdie5    =[    $deathc5,    army_cdie6    ] {ai_back(3);};
  294. void()    army_cdie6    =[    $deathc6,    army_cdie7    ] {ai_back(4);};
  295. void()    army_cdie7    =[    $deathc7,    army_cdie8    ] {};
  296. void()    army_cdie8    =[    $deathc8,    army_cdie9    ] {};
  297. void()    army_cdie9    =[    $deathc9,    army_cdie10    ] {};
  298. void()    army_cdie10    =[    $deathc10,    army_cdie11    ] {};
  299. //--------------------------------------------------------- Code Change -----
  300. void()  army_cdie11 =
  301. {       if (PM_Revive())  army_revivec1();
  302.         else   army_cdie12();
  303. };
  304. void()  army_cdie12     =[      $deathc11,      army_cdie11     ] {};
  305. //---------------------------------------------------------------------------
  306.  
  307.  
  308. void() army_die =
  309. {
  310. // check for gib
  311.     if (self.health < -35)
  312.     {
  313.         sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  314.         ThrowHead ("progs/h_guard.mdl", self.health);
  315.         ThrowGib ("progs/gib1.mdl", self.health);
  316.         ThrowGib ("progs/gib2.mdl", self.health);
  317.         ThrowGib ("progs/gib3.mdl", self.health);
  318.         return;
  319.     }
  320.  
  321. // regular death
  322.     sound (self, CHAN_VOICE, "soldier/death1.wav", 1, ATTN_NORM);
  323.     if (random() < 0.5)
  324.         army_die1 ();
  325.     else
  326.         army_cdie1 ();
  327. };
  328.  
  329.  
  330. /*QUAKED monster_army (1 0 0) (-16 -16 -24) (16 16 40) Ambush
  331. */
  332. void() monster_army =
  333. {    
  334.     if (deathmatch)
  335.     {
  336.         remove(self);
  337.         return;
  338.     }
  339.     precache_model ("progs/soldier.mdl");
  340.     precache_model ("progs/h_guard.mdl");
  341.     precache_model ("progs/gib1.mdl");
  342.     precache_model ("progs/gib2.mdl");
  343.     precache_model ("progs/gib3.mdl");
  344.  
  345.     precache_sound ("soldier/death1.wav");
  346.     precache_sound ("soldier/idle.wav");
  347.     precache_sound ("soldier/pain1.wav");
  348.     precache_sound ("soldier/pain2.wav");
  349.     precache_sound ("soldier/sattck1.wav");
  350.     precache_sound ("soldier/sight1.wav");
  351.  
  352.     precache_sound ("player/udeath.wav");        // gib death
  353.  
  354.  
  355.     self.solid = SOLID_SLIDEBOX;
  356.     self.movetype = MOVETYPE_STEP;
  357.  
  358.     setmodel (self, "progs/soldier.mdl");
  359.  
  360.     setsize (self, '-16 -16 -24', '16 16 40');
  361.     self.health = 30;
  362.  
  363.     self.th_stand = army_stand1;
  364.     self.th_walk = army_walk1;
  365.     self.th_run = army_run1;
  366.     self.th_missile = army_atk1;
  367.     self.th_pain = army_pain;
  368.     self.th_die = army_die;
  369.  
  370.     walkmonster_start ();
  371. };
  372.